from django.db import models

# Create your models here.

'''
资源表

id	name				url

1	创建项目			http://localhost:8080/createproject

2	添加项目成员

3	BUG列表
'''


# 资源表
class Resource(models.Model):
    name = models.CharField(max_length=100, unique=True)
    url = models.CharField(max_length=100)

    def __str__(self):
        return self.name, self.url


'''
角色表

id	name

1	项目经理

2	开发人员
'''


# 角色表
class Roles(models.Model):
    name = models.CharField(max_length=100, unique=True)
    resource = models.ManyToManyField(Resource)

    class Meta:
        app_label = 'apptwo'

    def __str__(self):
        return self.name


'''
id	name	roleid		mobile	password

1	张三		1

2	小米		2

3	小马		2
'''


# 用户表
class User(models.Model):
    name = models.CharField(max_length=100, unique=True)
    mobile = models.CharField(max_length=11, unique=True)
    password = models.CharField(max_length=128)
    roleid = models.ForeignKey(Roles, on_delete=models.CASCADE)

    def __str__(self):
        return self.name


'''
角色资源表

roleid		resid

1			1

1			2

1			3

2			3
'''


# 角色资源表
class RoleResource(models.Model):
    roleid = models.ForeignKey(Roles, on_delete=models.CASCADE)
    resid = models.ForeignKey(Resource, on_delete=models.CASCADE)

    def __str__(self):
        return self.roleid, self.resid


class AdminUser(models.Model):
    name = models.CharField(max_length=30, unique=True)
    roles = models.ForeignKey(Roles, on_delete=models.CASCADE)


class Project(models.Model):
    """
    项目表模型，用于存储项目信息。
    """
    # 项目名称字段，最大长度为255字符
    name = models.CharField(max_length=255, verbose_name='项目名称')
    # 项目描述字段，可以存储较长的文本
    description = models.TextField(verbose_name='项目描述')
    # 项目排序字段，用于排序显示
    order = models.IntegerField(verbose_name='排序')


class Task(models.Model):
    """
    任务表模型，用于存储任务信息。
    """
    # 任务名称字段，最大长度为255字符
    name = models.CharField(max_length=255, verbose_name='任务名称')
    # 任务描述字段，可以存储较长的文本
    description = models.CharField(max_length=255, verbose_name='任务描述')
    # 项目外键字段，表示任务属于哪个项目
    deadline = models.DateField(default='2023-01-01', verbose_name='完成时间')
    level = models.CharField(max_length=255, default='普通', verbose_name='任务等级')
    project = models.ForeignKey(Project, on_delete=models.CASCADE, verbose_name='所属项目')


class ProjectMember(models.Model):
    """
    项目人员表模型，用于存储项目成员信息。
    """
    # 自动增长的主键字段，用于唯一标识每条记录
    id = models.AutoField(primary_key=True, verbose_name='ID')
    # 任务外键字段，表示成员负责哪个任务
    task = models.ForeignKey(Task, on_delete=models.CASCADE, verbose_name='负责任务')
    # 项目ID字段，存储项目标识符
    projectid = models.IntegerField(verbose_name='项目ID')
    # 管理员用户ID字段，存储管理员标识符
    adminuserid = models.IntegerField(verbose_name='管理员ID')
    # 完成时间字段，用于记录任务完成的具体时间
    finish_time = models.DateTimeField(verbose_name='完成时间')
    # 详细描述字段，可以存储较长的文本
    detail_description = models.TextField(verbose_name='详细描述')
    # 添加时间字段，用于记录成员添加到项目的时间
    add_time = models.DateTimeField(verbose_name='添加时间')
    # 项目进度字段，用于记录项目的当前进度
    project_progress = models.CharField(max_length=255, verbose_name='项目进度')


# 测试表
class TestCase(models.Model):
    """
    测试用例模型，用于存储测试用例信息。
    """
    # 测试用例的唯一标识符
    taskid = models.ForeignKey(Task, on_delete=models.CASCADE)
    # 测试用例的URL
    url = models.CharField(max_length=255)
    # 测试用例的请求方法
    method = models.CharField(max_length=100)
    # 测试用例的请求参数
    params = models.TextField()
    # 测试用例的预期结果代码
    result_code = models.IntegerField(default=200)
    # 测试用例的执行状态
    status = models.IntegerField(default=0)
    # 测试用例的执行结果
    result = models.TextField(blank=True, null=True)
    # 测试是否通过
    is_pass = models.BooleanField(default=False)

    def __str__(self):
        return self.id.name+self.url
